home *** CD-ROM | disk | FTP | other *** search
/ NetNews Offline 2 / NetNews Offline Volume 2.iso / news / comp / lang / c-part1 / 7409 < prev    next >
Encoding:
Internet Message Format  |  1996-08-05  |  2.2 KB

  1. Path: goanna.cs.rmit.EDU.AU!not-for-mail
  2. From: rav@goanna.cs.rmit.EDU.AU (++           robin)
  3. Newsgroups: comp.lang.misc,comp.lang.c,comp.lang.pl1
  4. Subject: Re: GOTO controversy
  5. Date: 26 Feb 1996 20:05:18 +1100
  6. Organization: Comp Sci, RMIT, Melbourne, Australia
  7. Message-ID: <4grt4e$8fg@goanna.cs.rmit.EDU.AU>
  8. References: <rcshlds.1.000A6705@mailserv.mta.ca> <Dn8pJ8.nqs@emi.net>
  9. NNTP-Posting-Host: goanna.cs.rmit.edu.au
  10. X-Newsreader: NN version 6.5.0 #0 (NOV)
  11.  
  12.     markg@toledo.emi.net (Mark Grosberg) writes:
  13.  
  14.     >Robert C Shields (rcshlds@mailserv.mta.ca) wrote:
  15.     >: I am trying to get a feel for how people feel about the GOTO statement... 
  16.     >: please post..
  17.  
  18.     >Somebody at school saw a goto in my code and freaked. Then again, this 
  19.     >person (who shall remain nameless) is used to machines with 100MB of 
  20.     >memory and dual SPARC CPU's. I on the other hand am not.
  21.  
  22.     >The code in question was a routine that allocated various resources. 
  23.     >Below is an example of such a thing (this time using OS/2 & C). I use Goto's 
  24.     >to clean up the mess in the event of an error. 
  25.  
  26.     >Example for a good use of goto:
  27. ---                    ????
  28.     >------------------------------------------------------------------------------
  29.  
  30.     >   HEV    hev1, hev2, hev3;     /* Event semaphores */
  31.     >   HMTX   hmtx;                 /* Mutex semaphore  */ 
  32.     >   void  *ptr;              
  33.  
  34.     >   if (!DosCreateEventSem(0, &hev1, 0, FALSE))
  35.     >       goto hev1_failed;
  36.  
  37.     >   if (!DosCreateEventSem(0, &hev2, 0, FALSE))
  38.     >       goto hev2_failed;
  39.  
  40.     >   if (!DosCreateEventSem(0, &hev3, 0, FALSE))
  41.     >       goto hev3_failed;
  42.  
  43.     >   if (!DosCreateMutexSem(0, &hmtx, 0, FALSE))
  44.     >       goto hmtx_failed;
  45.  
  46.     >   if ((ptr = malloc(SOME_SIZE)) == NULL)
  47.     >       goto malloc_failed;
  48.  
  49.     >   /* Do some stuff here */
  50.     >   return TRUE; /* We did okay */
  51.  
  52.     >malloc_failed:
  53.     >   DosCloseMutexSem(hmtx);
  54.     >hmtx_failed:
  55.     >   DosCloseEventSem(hev3);
  56.     >hev3_failed:
  57.     >   DosCloseEventSem(hev2);
  58.     >hev2_failed:
  59.     >   DosCloseEventSem(hev1);
  60.     >hev1_failed:
  61.     >   return FALSE;
  62.  
  63. Is there any reason why the GOTOs can't be replaced by
  64. the particular action routine?
  65.  
  66. You have the action routines separated from their
  67. respective IFs, by a bunch of code (which may be large).
  68. It makes it clumsy to read such code.
  69.